package org.example.lock8;

import java.util.concurrent.TimeUnit;

/**
 * 8锁问题（理解什么是锁，锁的是什么？）
 * 3. 新增普通方法hello？ hello
 * 4. 两个对象？         打电话
 */
public class Lock02 {

    public static void main(String[] args) throws InterruptedException {
        // 两个调用者，即两把锁！
        Phone2 phone1 = new Phone2();
        Phone2 phone2 = new Phone2();
        new Thread(() -> { phone1.sendEmail(); }).start();
        TimeUnit.SECONDS.sleep(1);
        new Thread(() -> { phone2.sendSms(); }).start();
    }
}

// 手机
class Phone2 {

    // synchronized 修饰普通方法 锁的时调用者（phone）！
    public synchronized void sendEmail() {
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("发短信"); }

    public synchronized void sendSms() {
        System.out.println("打电话");
    }

    // 普通方法不需要获得锁！
    public void sendHello() { System.out.println("hello"); }

}
